package juc.lock.saleticket;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 高类聚低耦合
 * 线程  操作   资源类
 *
 * 线程的 start方法调用后线程立即执行吗？答：不是，线程调用方法后等待CPU的调度。
 */

class Ticket {
    private int num = 30; //剩余的票数

    public void sale(){

        Lock lock = new ReentrantLock(); //获取可重用锁

        lock.lock();
        try{
            if( num > 0 ){
                System.out.println(Thread.currentThread().getName()+"卖出了第：" + (num--) +"张票"+"还剩："+num+"张！");
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            lock.unlock();
        }

    }
}
